import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {

    public static User login(){
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入你的姓名");
        String name = myScanner.nextLine();

        System.out.println("请输入你的身份 1. 管理员  2. 普通用户");
        int choice = myScanner.nextInt();

        if(choice == 1){
            AdminUser adminUser = new AdminUser(name);
            return adminUser;
            //使用 User类 作为返回 接收
            //这里发生了向上转型
            //为下面 动态绑定（多态）做铺垫
        }else {
            NormalUser normalUser = new NormalUser(name);
            return normalUser;
            //使用 User类 作为返回 接收
            //这里发生了向上转型
            //为下面 动态绑定（多态）做铺垫
        }

    }

    public static void main(String[] args) {
        //此处语句作用是 在你登录之前 书架上已经有书了
        BookList bookList = new BookList();
        //new 的时候 会先调用 构造方法进行初始化

        while(true) {
            User user = login();
            //user.menu();

            //如果父类中没有menu方法,而只是子类有menu方法的话，此处会报错
            //所以 父类中也要有 menu方法 ，这样 可以实现 子类重写父类方法， 为实现动态绑定（多态）提供实现的条件
            //但 父类 的一个menu方法 需要 抽象化，把具体打印菜单的事情 交给 子类自己完成，所以 父类的menu方法 要为 抽象方法

            //因此 解决办法 是 在 父类 User 中写一个menu方法，但 User 只是一个有被继承作用的类，并不能具体化具象化实现某一个对象
            //而其子类与User类相比 可以更具体化，具象化 一个对象
            //因此 我们要将 User类 改为 抽象类

            //user.menu();

            //此时  user.menu(); 语句可以使用 ， 并且发生动态绑定（多态）

            int choice = user.menu();

            user.doIopreation(choice, bookList);
        }

    }
}
